# -*- codeing = utf-8 -*-
# @Time : 2021/2/20 16:22
# @Atuthor: 朱朱
# @File: 014字符串格式化.py
# @Software: PyCharm
""
"""
格式符号	转换
%%	        输出 % 号
%s	        字符串
%d	        有符号十进制整数
%f	        浮点数
%c	        字符
%u	        无符号十进制整数
%o	        八进制整数
%x	        十六进制整数（小写字母0x）
%X	        十六进制整数（大写字母0X）
%e	        科学计数法（小写'e'）
%E	        科学计数法（大写“E”）
%g	        ％f和％e 的简写
%G	        ％f和％E的简写
"""
# 省略字段名,传递位置参数
print('我叫{},今年{}'.format('小明', 18))

# 大括号的个数可以少于位置参数的个数,就近原则取值
print('我爱吃{}和{}'.format('香蕉','苹果','葡萄'))

# 根据元组的索引取值
print('身高{0},家住{2},我爱{1},小明也爱{1}'.format(1.8, '阿香','中国'))

# 使用变量名形式进行传值
print('我大哥是{name}今年才{age}岁'.format(name='阿汪',age=8))

# 数字也可以省略
print('这是一个关于{}、{}和{girl}的故事。'.format(
    '小明', '阿飞', girl='阿香'))

# 使用元组传参
infos = '钢铁侠', 66, '小辣椒'
print('我是{}，身价{}亿。'.format(*infos))

# 使用字典传参
venom = {'name': '毒液', 'weakness': '火'}
print('我是{name}，我怕{weakness}。'.format(**venom))

# 同时使用位置参数、元组、关键字参数、字典传参
# 注意：
# 位置参数要在关键字参数前面
# *元组要在**字典前面
tup = '鹰眼',
dic = {'weapon': '箭'}
text = '我是{1}，我怕{weakness}。我是{0}，我用{weapon}。'
text = text.format(
    *tup, '黑寡妇', weakness='男人', **dic)
print(text)

class Person(object):
  def __init__(self,name,age,gender):
    self.name = name
    self.age = age
    self.gender = gender
p = Person('zhangsan',18,'female')
print('姓名是{0.name},年龄是{0.age},性别是{0.gender}'.format(p))
print('姓名是{.name}'.format(p))  # 只有一个替换字段时，可以省略数字

# 中括号用法：用列表传递位置参数
infos = ['阿星', 9527]
food = ['霸王花', '爆米花']
print('我叫{0[0]}，警号{0[1]}，爱吃{1[0]},{1[1]}。'.format(
    infos, food))

# 中括号用法：用元组传递位置参数
food = ('僵尸', '脑子')
print('我叫{0[0]}，年龄{1}，爱吃{0[1]}。'.format(
    food, 66))

# 中括号用法：用字典传递位置参数
dic = {'name':'阿星', 'pid':'9527'}
print(type(dic))
print('我是{[name]}！'.format(
    dic))
# 多个替换字段，不能省略数字
print('我是{0[name]}，警号{0[pid]}。'.format(
    dic))

# 转换字段
print('I am {!s}!'.format('Bruce Lee 李小龙'))
print('I am {!r}!'.format('Bruce Lee 李小龙'))
print('I am {!a}!'.format('Bruce Lee 李小龙'))